﻿using System;
//4.14.6 void*
//空指针（void*）不给出假定底层类型数据的具体类型，它对于处理原始内存的函数是非常有用的。
//任意指针类型都可以隐式地转换为void*。
//void*不可以被解除引用，算术运算符不能通过void指针执行，例如：

namespace _147_不安全代码_void星
{
    class Test
    {
        unsafe static void Zap(void* memory, int byteCount)
        {
            byte* b = (byte*)memory;
            for (int i = 0; i < byteCount; i++)
                *b++ = 0;
        }

        unsafe static void Main(string[] args)
        {
            short[] a = { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 };
            fixed (short* p = a)
            {
                //sizeof返回值——类型的大小，单位为字节
                Zap(p, a.Length * sizeof(short));
            }
            foreach (short x in a)
                System.Console.WriteLine(x); // 打印所有零

            Console.ReadKey();
        }
    }
}
//4.14.7 指向未托管代码的指针
//指针也很适合访问位于托管堆之外的数据（如与C DLL或COM交互时），以及处理不在主存中的数据（如图形化内存或嵌入式设备的存储介质）。